package org.apache.ibatis.scripting.xmltags;

/**
 * StaticTextSqlNode 用于存储静态文本，
 * TextSqlNode 用于存储带有 ${} 占位符的文本，
 * IfSqlNode 则用于存储 <if> 节点的内容。
 * MixedSqlNode 内部维护了一个 SqlNode 集合，用于存储各种各样的 SqlNode。
 *
 * @author Clinton Begin
 */
public class IfSqlNode implements SqlNode {
    private final ExpressionEvaluator evaluator;
    private final String test;
    private final SqlNode contents;

    public IfSqlNode(SqlNode contents, String test) {
        this.test = test;
        this.contents = contents;
        this.evaluator = new ExpressionEvaluator();
    }

    @Override
    public boolean apply(DynamicContext context) {
        // 通过 ONGL 评估 test 表达式的结果
        if (evaluator.evaluateBoolean(test, context.getBindings())) {
            // test表达式为true, 则执行子节点的apply()方法
            contents.apply(context);
            return true;
        }
        // test表达式为false
        return false;
    }

}
